﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

struct Stu
{
	char name[20];
	int age;
	char sex[5];
	char id[20];
};
//int main()
//{
//	//按照结构体成员的顺序初始化
//	struct Stu s1 = { "张三",20,"男","123456" };
//	printf("%s\n", s1.name);
//	printf("%d\n", s1.age);
//	printf("%s\n", s1.sex);
//	printf("%s\n", s1.id);
//
//	//按照指定顺序初始化
//	struct Stu s2 = { .age = 18,.name = "lisi",.id = "234567",.sex = "女" };
//	printf("%s\n", s2.name);
//	printf("%d\n", s2.age);
//	printf("%s\n", s2.sex);
//	printf("%s\n", s2.id);
//	return 0;
//}
//struct//匿名结构体
//{
//	int a;
//	char b;
//	double c;
//};//如果没有对结构体重命名，基本上只能使用一次
////struct Node//结构体自引用的方式
////{
////	int data;
////	struct Node* next;
////};
////对结构体重命名
//typedef struct Node
//{
//	int data;
//	struct Node* next;
//}Node;
//**********************************************************************
//内存对齐：拿空间来换取时间的做法
//struct S1
//{
//	char c1;//8 1 1
//	int i;//8 4 4
//	char c2;//8 1 1
//};
//struct S2
//{
//	char c1;//8 1 1
//	char c2;//8 1 1
//	int i;//8 4 4
//};
//struct S3
//{
//	double d;//8 8 8
//	char c;//8 1 1
//	int i;//8 4 4
//};
//struct S4
//{
//	char c1;//8 1 1
//	struct S3 s3;//16->从8开始：因为从结构体中最大对齐数的整数倍开始
//	double d;//8 8 8
//};
//int main()
//{
//	//printf("%d\n", sizeof(struct S1));//12
//	//printf("%d\n", sizeof(struct S2));//8
//	//printf("%d\n", sizeof(struct S3));//16
//	printf("%d\n", sizeof(struct S4));//32
//}
//修改默认对齐数
//#pragma pack(1)//设置默认对⻬数为1
//struct S
//{
//	char c1;//1 1 1
//	int i;//1 4 1
//	char c2;//1 1 1
//};
//#pragma pack()//取消设置的对⻬数，还原为默认
//int main()
//{
//	//输出的结果是什么？
//	printf("%d\n", sizeof(struct S));//6
//	//c1:0 i:1~4 c2:5
//	return 0;
//}
//struct S
//{
//	int data[1000];
//	int num;
//};
//struct S s1= { {1,2,3,4},1000 };
//void Print1(struct S s)
//{
//	printf("%d\n", s.num);
//}
//void Print2(struct S* ps)
//{
//	printf("%d\n", ps->num);
//}
//int main()
//{
//	Print1(s1);//传值
//	Print2(&s1);//传地址
//}
//********************************************************
//位段
//struct A
//{
//	int _a : 2;
//	int _b : 5;
//	int _c : 10;
//	int _d : 30;
//};
//int main()
//{
//	printf("%d\n", sizeof(struct A));//8
//}
//在一个字节中，采用从右向左使用，剩余的空间不足下一个成员使用时，就浪费掉
//struct S
//{
//	char a : 3;
//	char b : 4;
//	char c : 5;
//	char d : 4;
//};//3+4+5+4=16
//int main()
//{
//	printf("%zd\n", sizeof(struct S));//3
//	struct S s = { 0 };
//	s.a = 10;
//	s.b = 12;
//	s.c = 3;
//	s.d = 4;
//}//不能对位段成员使用&符号：有些成员的起始地址并不是字节的起始地址
//***********************************************************
//联合体：所有成员共用一块空间，空间大小>=最大成员的大小
//联合类型的声明
//union Un
//{
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义
//	union Un un = { 0 };
//	//计算连个变量的⼤⼩
//	printf("%d\n", sizeof(un));//4
//	// 下⾯输出的结果是⼀样的吗？
//	/*printf("%p\n", &(un.i));
//	printf("%p\n", &(un.c));
//	printf("%p\n", &un);*/
//	un.i = 0x11223344;
//	un.c = 0x55;
//	printf("%x\n", un.i);//0x11223355
//}
//union Un1
//{
//	char c[5];//5
//	int i;//4
//};
//union Un2
//{
//	short c[7];//14
//	int i;//4
//};
////当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候，就要对⻬到最⼤对⻬数的整数倍。
//int main()
//{
//	//下⾯输出的结果是什么？
//	printf("%d\n", sizeof(union Un1));//8
//	printf("%d\n", sizeof(union Un2));//16
//	return 0;
//}
//******************************************************************
//枚举:默认从0开始，依次递增1
enum Day//星期
{
	Mon,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};
enum Color//颜⾊
{
	RED = 1,
	GREEN = 2,
	BLUE = 4
};
enum Color clr = GREEN;//使⽤枚举常量给枚举变量赋值
//是否可以拿整数给枚举变量赋值呢？C语言可以，c++中不行
//*********************
typedef struct {
	int a;//8 4 4
	char b;//8 1 1
	short c;//8 2 2
	short d;//8 2 2
}AA_t;
struct A
{
	int a;//4 4 4
	short b;//4 2 2
	int c;//4 4 4
	char d;//4 1 1
};//16
struct B
{
	int a;//4 4 4
	short b;//4 2 2
	char c;//4 1 1
	int d;//4 4 4
};//12

//#pragma pack(4)/*编译选项，表示4字节对齐 平台：VS2013。语言：C语言*/
////假设long 是4个字节
//int main(int argc, char* argv[])
//{
//	struct tagTest1
//	{
//		short a;//4 2 2
//		char d;//4 1 1
//		long b;//4 4 4 
//		long c;//4 4 4
//	};
//	struct tagTest2
//	{
//		long b;//4 4 4
//		short c;//4 2 2
//		char d;//4 1 1
//		long a;//4 4 4
//	};
//	struct tagTest3
//	{
//		short c;//4 2 2
//		long b;//4 4 4
//		char d;//4 1 1
//		long a;//4 4 4
//	};
//	struct tagTest1 stT1;
//	struct tagTest2 stT2;
//	struct tagTest3 stT3;
//
//	printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));//12 12 16
//	return 0;
//}
//#pragma pack()
//#define MAX_SIZE A+B
//struct _Record_Struct
//{
//	unsigned char Env_Alarm_ID : 4;
//	unsigned char Para1 : 2;
//	unsigned char state;
//	unsigned char avail : 1;
//}*Env_Alarm_Record;//需要3个字节
//struct _Record_Struct* pointer = (struct _Record_Struct*)malloc(sizeof(struct _Record_Struct) * MAX_SIZE);
//当A=2， B=3时，pointer分配（ 9）个字节的空间。
//int main()
//{
//	unsigned char puc[4];
//	struct tagPIM
//	{
//		unsigned char ucPim1;
//		unsigned char ucData0 : 1;
//		unsigned char ucData1 : 2;
//		unsigned char ucData2 : 3;
//	}*pstPimData;
//	pstPimData = (struct tagPIM*)puc;
//	memset(puc, 0, 4);
//	pstPimData->ucPim1 = 2;
//	pstPimData->ucData0 = 3;
//	pstPimData->ucData1 = 4;
//	pstPimData->ucData2 = 5;
//	printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);//02 29 00 00
//	return 0;
//}
//union Un
//{
//	short s[7];//14
//	int n;//4
//};
//int main()
//{
//	printf("%d\n", sizeof(union Un));//16
//	return 0;
//}
//int main()
//{
//	union
//	{
//		short k;
//		char i[2];
//	}*s, a;
//	s = &a;
//	s->i[0] = 0x39;
//	s->i[1] = 0x38;
//	printf("%x\n", a.k);
//	return 0;
//}
#include <stdbool.h>
#include <math.h>
bool check(int x)
{
	int sum = 0, tmp = x;
	int ret = 0;
	while (tmp)
	{
		ret++;
		tmp /= 10;
	}
	tmp = x;
	ret--;
	while (ret > 0)
	{
		sum += (tmp /(int) pow(10,ret)) * (tmp %(int) pow(10,ret));
		ret--;
	}
	if (sum == x)return true;
	else return false;
}
int main()
{
	if (check(655))printf("1");
	/*for (int i = 10000; i < 100000; i++)
	{
		if (check(i))printf("%d ", i);
	}*/
	return 0;
}